/*************************************************************************************
 *
 *	模块名称 : 链表操作接口
 *	文件名称 : 03_list.c
 *	版   本 : V1.0
 *	说   明 : 线程邮箱中链表的相应操作函数接口
 *	修改记录 :
 *		     版本号       日期         作者        说明
 *	         V1.0     2023-04-13      rush_long        发布
 *
 *	
 *
 *************************************************************************************/

#ifndef __LIST_H__
#define __LIST_H__
#include <pthread.h>
#include <stdlib.h>
#include <string.h>

typedef void *(*th_fun)(void *arg);	//创建线程所需的函数类型指针
typedef char DATATYPE[256];			//传递数据的格式
typedef struct mail_data
{

    pthread_t   id_of_sender;
    char       name_of_sender[256];
    pthread_t   id_of_recver;
    char       name_of_recver[256];
    DATATYPE data;
}MAIL_DATA;					//线程邮箱间传递数据的格式

typedef struct queue{
    MAIL_DATA data;
    struct queue *next;
}Que, *pQue;				//队列节点类型

typedef struct thread_node
{
    pthread_t tid;         //线程id号
    char name[256];        //线程名字 ,必须唯一
    Que *mail_head, *mail_tail;
    th_fun th;
}LIST_DATA;					//链表节点数据类型

typedef struct Link{
    LIST_DATA elem;
    struct Link *next;
}LIST_LINK;				//链表节点类型

/***************************************************************
 *函数名: list_init
 *功  能: 初始化链表
 *参  数: 
 * 		无
 *返回值: 
 * 		返回链表头节点指针
 * 	
 *注意事项:
 *		无
 ***************************************************************/
extern LIST_LINK *list_init();

/***************************************************************
 *函数名: list_for_each
 *功  能: 寻找链表中寻找名称符合的节点
 *参  数: 
 * 		链表头节点指针，需要加入节点中的数据
 *返回值: 
 * 		无
 * 	
 *注意事项:
 *		传入的两个参数均不能为空指针
 ***************************************************************/
extern LIST_LINK *list_for_each(LIST_LINK *head, char *name);

/***************************************************************
 *函数名: list_add
 *功  能: 添加链表节点
 *参  数: 
 * 		链表头节点指针，需要加入节点中的数据
 *返回值: 
 * 		无
 * 	
 *注意事项:
 *		传入的两个参数均不能为空指针
 ***************************************************************/
extern void list_add(LIST_LINK *head, LIST_LINK *info);

#endif
